<?php
defined('BASEPATH') OR exit('No direct script access allowed');
/**
 * Created by PhpStorm.
 * The project “dev”
 * File name “Login_model.php”
 *
 * User: znx
 * Company: 思议创想
 * Q  Q: 865303386
 * Site: www.siyi360.com
 *
 * Date: 2017-02-13
 * Time: 00:44
 */
class Login_model extends CI_Model {
    private $userEncrypt ;

    public function __construct()
    {
        parent::__construct();

        $this->load->library('form_validation');
        $this->userEncrypt = new PasswordHash(PHPASS_HASH_STRENGTH, PHPASS_HASH_PORTABLE);
    }

    /**
     * user_login
     * 系统用户登录处理
     *
     * @access public
     */
    public function login()
    {
        // 获取表单数据
        $form = $this->input->post();

        // 表单验证
        $this->form_validation->set_rules('user_name', 'user_name', 'required', array('required' => '用户名不能为空'));
        $this->form_validation->set_rules('user_pass', 'user_pass', 'required', array('required' => '登录密码不能为空'));
        $this->form_validation->set_rules('verifyCode', 'verifyCode', 'required', array('required' => '验证码不能为空'));

        if (!$this->form_validation->run()) return array('status'=>-1, 'msg'=>'数据提交错误', 'result'=>'');

        // 验证码验证
        $verifyCode = $this->session->userdata('verify_code');
        if ($form['verifyCode'] != $verifyCode) {
            // 删除验证码session
            $this->session->unset_userdata('verify_code');

            return array('status'=>-1, 'msg'=>'验证码不正确', 'result'=>'');
        }

        /*===== 系统用户登录验证 =====*/
        // 通过用户名查询出用户信息
        $table = $this->db->dbprefix('admin_user');
        $user = $this->db
            ->query('select * from ' . $table . ' where user_name=\''. $form['user_name'] . '\'')
            ->row_array();

        // 验证用户名是否有效
        if (empty($user)) return array('status'=>-1, 'msg'=>'用户名或登录密码不正确', 'result'=>'');

        // 验证密码是否有效
        $pass = $this->userEncrypt->CheckPassword($form['user_pass'], $user['user_pass']);
        if (!$pass) return array('status'=>-1, 'msg'=>'用户名或登录密码不正确', 'result'=>'');

        // 验证用户状态
        if ($user['user_status']===0) return array('status'=>-2, 'msg'=>'该用户已被禁止登录', 'result'=>'');

        /*===== *登录成功，将用户信息保存到session* =====*/
        unset($user['user_pass']); // 过滤不需要的字段
        $session_data = array();
        $session_data['user_info'] = $user;

        // 查询出当前登录用户所属角色
        $table = $this->db->dbprefix('admin_role');
        $role = $this->db
            ->query('select role_acl from '.$table.' where role_id='.$user['user_role'].'')
            ->row_array();

        // 根据查询出来的角色判断系统用户级别
        if (!empty($role['role_acl']) && $role['role_acl'] !== 'all') { // 普通管理员
            // 根据角色查询出角色的权限节点
            $acl = $this->db->select('acl_controller, acl_action')
                ->where('acl_id in('.$role['role_acl'].')')
                ->get('admin_acl')
                ->result_array();

            // 将权限节点保存到session
            $session_data['user_acl'] = $acl;
        } else if ($role['role_acl'] === 'all') {   // 超级管理员
            $session_data['user_acl'] = 'all';
        } else if (empty($role['role_acl'])) {  // 未分配任何权限管理员
            $session_data['user_acl'] = 'null';
        }

        // 保存session
        $this->session->set_userdata($session_data);

        return array('status'=>1, 'msg'=>'登录成功！', 'result'=>array('jumpUrl'=>site_url('index')));
        /*===== *登录成功，将用户信息保存到session* =====*/
    }

    /**
     * user_logout
     * 系统用户退出登录
     */
    public function user_logout()
    {
        //销毁session
        $this->session->sess_destroy();

        //删除session临时目录中的所有文件
        //$session_dir = APPPATH.'cache/session/'; //session临时目录路径
        //delDirAllFile($session_dir);

        $result = array('status'=>1, 'msg'=>'系统退出成功！', 'url'=>site_url('login'));
        return $result;
    }

}